﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using PortalCurriculo.Domain;
using PortalCurriculo.WebUI.Helpers;
using ListView = PortalCurriculo.Util.CustomControls.ListView;

namespace PortalCurriculo.WebUI.UserControls
{
    public partial class Telefone : System.Web.UI.UserControl
    {
        static List<Domain.Telefone> Telefones { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;

            PreencherDropDownTipoEndereco();
            PreencherTela();
        }

        private void PreencherDropDownTipoEndereco()
        {
            DropDownTipoTelefone.DataTextField = "Descricao";
            DropDownTipoTelefone.DataValueField = "Id";
            DropDownTipoTelefone.DataSource = new Domain.TipoTelefone().SelecionarAtivos();
            DropDownTipoTelefone.DataBind();
        }

        private void PreencherTela()
        {
            var usuario = (Usuario)SessionHelper.Session(SessionHelper.SessionName.UsuarioLogado);
            Telefones = new Domain.Telefone {IdPessoa = usuario.IdPessoa}.SelecionarLista();

            ListViewTelefone.DataSource = Telefones;
            ListViewTelefone.DataBind();
        }

        protected void ListViewTelefone_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            var item = (ListViewDataItem)e.Item;
            var telefone = (Domain.Telefone)item.DataItem;

            var labelTipoTelefone = (Label)item.FindControl("LabelTipoTelefone");
            var labelNumero = (Label)item.FindControl("LabelNumero");
            var labelRamal = (Label)item.FindControl("LabelRamal");
            var excluir = (ImageButton)item.FindControl("ImageButtonExcluir");

            labelTipoTelefone.Text = telefone.TipoTelefone.Descricao;
            labelNumero.Text = telefone.Numero;
            labelRamal.Text = telefone.Ramal.ToString();
            excluir.Attributes.Add("Id", telefone.Id.ToString());
        }

        protected void ImageButtonExcluir_Click(object sender, ImageClickEventArgs e)
        {
            var id = int.Parse(((ImageButton)sender).Attributes["Id"]);

            Domain.Telefone telefone = (from telefoneLinq in Telefones
                                       where telefoneLinq.Id == id
                                       select telefoneLinq).FirstOrDefault();

            if (telefone != null)
            {
                telefone.Delete();
                Telefones.Remove(telefone);
            }

            ListViewTelefone.DataSource = Telefones;
            ListViewTelefone.DataBind();
        }

        protected void LinkButtonAdicionar_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid) return;

            var usuario = ((Usuario)SessionHelper.Session(SessionHelper.SessionName.UsuarioLogado));

            var telefone = new Domain.Telefone
                               {
                                   Ativo = true,
                                   IdPessoa = usuario.IdPessoa,
                                   IdTipoTelefone = int.Parse(DropDownTipoTelefone.SelectedValue),
                                   Numero = TextBoxNumero.Text,
                                   Ramal = string.IsNullOrEmpty(TextBoxRamal.Text) ? (int?) null : int.Parse(TextBoxRamal.Text)
                               };

            telefone.Save();

            if (Telefones == null) Telefones = new List<Domain.Telefone>();

            Telefones.Add(telefone);

            TextBoxRamal.Text = string.Empty;
            TextBoxNumero.Text = string.Empty;

            ListViewTelefone.DataSource = Telefones;
            ListViewTelefone.DataBind();

            WebHelper.ShowMessageBox("Telefone incluído com sucesso!", ref UpdatePanelTelefone);

            DropDownTipoTelefone.Focus();
        }

        protected void MaskEditValidatorNumero_MaskedEditServerValidator(object sender, ServerValidateEventArgs e)
        {
            e.IsValid = !TextBoxNumero.Text.Contains("_");
        }
    }
}